import configparser

import pymysql
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 设置Chrome浏览器驱动的路径
driver_path = r'chromedriver.exe'  # 替换为你的chromedriver路径
config=configparser.ConfigParser()
config.read("config.ini")

# 初始化Chrome浏览器
service = ChromeService(executable_path=driver_path)
driver = webdriver.Chrome(service=service)

# 打开百度网盘网页
driver.get('https://pan.baidu.com/')

# 手动登录后，等待一段时间以确保登录成功
print("请手动登录百度网盘，完成后按回车键继续...")
input()  # 等待用户手动登录

# 手动导航到指定页面后，等待一段时间以确保页面加载完成
print("请手动导航到指定页面，完成后按回车键继续...")
input()  # 等待用户手动导航到指定页面

# 等待指定输入框元素出现并输入内容
def baidu(name,dirname):
    try:
        wait = WebDriverWait(driver, 30)# 增加等待时间
        input_element = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'input.u-input__inner[placeholder="搜索聊天中的所有文件"]')))
        print("找到输入框元素")
        input_element.click()  # 点击输入框
        input_element.clear()  # 清除输入框中的内容（如果有）
        input_element.send_keys(name)  # 输入内容
        print("内容已输入")
    except Exception as e:
        print(f"未能找到或输入内容到输入框元素: {e}")
        return 0

    # 等待带有 u-input__suffix 类名的元素出现并点击
    try:
        wait = WebDriverWait(driver, 30)  # 增加等待时间
        suffix_element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'span.u-input__suffix')))
        print("找到带有 u-input__suffix 类名的元素")
        suffix_element.click()  # 点击带有 u-input__suffix 类名的元素
        print("带有 u-input__suffix 类名的元素已点击")
    except Exception as e:
        print(f"未能找到或点击带有 u-input__suffix 类名的元素: {e}")
        return 0

    # 全选！
    time.sleep(3)
    # 等待表格中的第一个 tr 元素出现并点击
    try:
        wait = WebDriverWait(driver, 5)  # 增加等待时间
        tr_element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,
                                                            'table.im-pan-table__body-table.mouse-choose-box > tbody > tr.im-pan-table__body-row.mouse-choose-item:first-child')))
        print("找到表格中的第一个 tr 元素")
        tr_element.click()  # 点击第一个 tr 元素
        print("第一个 tr 元素已点击")
    except Exception as e:
        print(f"未能找到或点击表格中的第一个 tr 元素,没有找到书籍")
        return 0

    # 转存
    try:
        wait = WebDriverWait(driver, 30)  # 增加等待时间
        button_element = wait.until(EC.element_to_be_clickable(
            (By.CSS_SELECTOR, 'button.u-button.u-button--default.u-button--mini > i.u-icon-recommend + span')))
        print("找到带有 u-button u-button--default u-button--mini 类名的按钮")
        button_element.click()  # 点击按钮
        print("按钮已点击")
    except Exception as e:
        print(f"未能找到或点击带有 u-button u-button--default u-button--mini 类名的按钮: {e}")
        return 0
    time.sleep(2)

    try:
        wait = WebDriverWait(driver, 30)  # 增加等待时间
        popup = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'dialog')))
        #定位到转存文件夹中
        transfer_button1 = popup.find_element(By.XPATH, f"//span[text()='{dirname}']")
        # 点击“转存到”按钮
        transfer_button1.click()
        # 定位到“转存到”按钮
        transfer_button = popup.find_element(By.XPATH, "//span[text()='转存到']")
        # 点击“转存到”按钮
        transfer_button.click()
        # time.sleep(3)
        # transfer_button = popup.find_element(By.XPATH, "//span[text()='取消']")
        # # 点击“转存到”按钮
        # transfer_button.click()
    except Exception as e:
        print(f"属于正常报错可以不用管, ")
        print("!!!!!!!!!!!!!!!!!!!!!!!")
        print("aaaaaaaaaaaaaaaaaaaaaaaaaaaa")
        print(f"脚本没有卡死，所以没有找到此元素")
        print("aaaaaaaaaaaaaaaaaaaaaaaaaaaa")

    # time.sleep(3)
    # try:
    #     # wait = WebDriverWait(driver, 30)  # 增加等待时间
    #     popup = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'dialog')))
    #     # 定位到“转存到”按钮
    #     transfer_button = popup.find_element(By.XPATH, "//span[text()='取消']")
    #     # 点击“转存到”按钮
    #     transfer_button.click()
    # except Exception as e:
    #     print("aaaaaaaaaaaaaaaaaaaaaaaaaaaa")
    #     print(f"脚本没有卡死，所以没有找到此元素")
    #     print("aaaaaaaaaaaaaaaaaaaaaaaaaaaa")

    time.sleep(2)

    #取消选中下一个
    try:
        wait = WebDriverWait(driver, 16)  # 增加等待时间
        tr_element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,
                                                            'table.im-pan-table__body-table.mouse-choose-box > tbody > tr.im-pan-table__body-row.mouse-choose-item:first-child')))
        print("找到表格中的第一个 tr 元素")
        tr_element.click()  # 点击第一个 tr 元素
        print("第一个 tr 元素已点击")
    except Exception as e:
        print(f"未能找到或点击表格中的第一个 tr 元素: {e}")
    return 1

def get_all_ssids(db_config):
    """
    查询数据库中 books 表的所有 ssid 字段，并返回一个包含所有 ssid 的列表。

    :param db_config: 包含数据库连接信息的字典
    :return: 包含所有 ssid 的列表
    """
    try:
        # 连接到数据库
        conn = pymysql.connect(**db_config)
        cursor = conn.cursor()

        # 执行查询
        query = f"SELECT {config.get('Codes','selectZiDuan')} FROM {config.get('Codes','table')} WHERE {config.get('Codes','selectZiDuan')} IS NOT NULL AND {config.get('Codes','selectZiDuan')} != '' and isnot!=1 AND id BETWEEN {config.get('Codes','start')} AND {config.get('Codes','end')}"
        cursor.execute(query)

        # 获取所有结果
        ssids = cursor.fetchall()

        # 将结果存储到列表中
        ssids_list = [ssid[0] for ssid in ssids]

        return ssids_list

    except Exception as e:
        print(f"Error: {e}")
        return []

    finally:
        # 关闭游标和数据库连接
        if cursor:
            cursor.close()
        if conn:
            conn.close()

# 数据库连接配置


db_config = {
    'host': config.get('Codes','host'),
    'user': config.get('Codes','user'),
    'password': config.get('Codes','password'),
    'database': config.get('Codes','data')
}
def updata(db,ssid):
   conn2= pymysql.connect(**db)
   update_query = f"UPDATE {config.get('Codes','table')} SET isnot = 1 WHERE book_ssid = %s"
   conn2.cursor().execute(update_query, (ssid,))

   # 提交事务
   conn2.commit()

listtolist=get_all_ssids(db_config)
for i in listtolist :
    print(f"正在处理ssid{i}")
    if baidu(i,config.get('Codes','zcdir')):
        print(f"{i}已经存入网盘")
        updata(db_config,i)
        print(f"{i}isnot字段已经设置为1")
    else:
        print(f"{i}没有找到相关的书籍")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")
print("全部转存完成已经！！！！！！！！！！！！")

# 保持浏览器打开状态
while True:
    pass